package com.example.Gethome.controller;

import com.example.Gethome.entity.Home;
import com.example.Gethome.entity.User;
import com.example.Gethome.service.HomeService;
import com.example.Gethome.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.util.ArrayList;
import java.util.List;

@RestController
@RequestMapping(value = "User")
@CrossOrigin(allowCredentials = "true", allowedHeaders = "*")
public class UserController {

    @Autowired
    private UserService userService;

    @Autowired
    private HomeService homeService;

    // 用户首先要注册自己的账号
    // User是用户的所有信息，包括用户的所有字段，由于用户的所有字段均无确定的范围，因此我这里不做要求
    @RequestMapping(path = "register")
    public String register(@RequestBody User user) {
//        if (userService.addUser(user)) {
//            // 如果返回了true，也就是说用户的身份信息是正确的
//            // 那就自动存入了用户数据
//            return "注册成功";
//        } else {
//            // 用户输入的身份信息不正确
//            return "注册失败，身份信息不正确";
//        }
        userService.addUser(user);
        return "注册成功";
    }

    // 用户首先需要登录，使用用户名和密码，会返回成功或者失败的页面，需要小程序去做
    // 这里的username和password均无确定范围
    @RequestMapping(path = "login")
    public String login(@RequestParam String username, @RequestParam String password) {
        // 如果用户登录返回值为1，说明用户已经注册，可以登录
        if(userService.loginUser(username, password)) {
            return "success";
        } else return "fail";
    }

    // 以下分为四个部分进行设计
    // 首先是出售房屋
    // 用户向服务器发布房屋信息，由于房屋信息自己就有独特的属性，那么我们也就不需要担心，此函数可以重用
    // 发送卖房信息
    @RequestMapping(path = "sellerPostHome")
    public void sellerPostHome(@RequestBody Home home) {
        homeService.addHome(home);
    }

    // 用户查看自己的房屋审核情况，根据自己的名字进行查找
    // name是用户姓名
    @RequestMapping(path = "sellerCheckHomeState")
    public List<?> checkHomeState(@RequestParam String name) {
        return homeService.getOwnerHome(name);
    }

    // 用户发现自己的房屋审核未通过，可以点击后进行修改
    // 发送卖房信息
    @RequestMapping(path = "sellerUpdateHome")
    public void sellerUpdateHome() {

    }

    // 然后是用户发布租房信息
    @RequestMapping(path = "rentPostHome")
    public void rentPostHome(@RequestBody Home home) {
        homeService.addHome(home);
    }

    // 用户查看自己租房信息审核情况
    // name是用户姓名
    @RequestMapping(path = "rentCheckHomeState")
    public List<?> rentCheckHomeState(@RequestParam String name) {
        return homeService.getOwnerHome(name);
    }

    // 用户发现自己房屋审核未通过，可以点击后修改
    // 发送租房信息
    @RequestMapping(path = "rentUpdateHome")
    public void rentUpdateHome(@RequestBody Home home) {
        homeService.addHome(home);
    }

    // 然后是用户可以申请租房
    // userName是用户名字，homeName是房屋的名字
    @RequestMapping(path = "rentHome")
    public void rentHome(@RequestParam String userName, @RequestParam String homeName) {
        homeService.changeHomeOwner(userName, homeName);
    }

    // 用户查看自己的租房情况
    // name是用户的名字，type是租房
    @RequestMapping(path = "checkRentHome")
    public List<?> checkRentHome(@RequestParam String name, @RequestParam String type) {
        return homeService.checkHomeByType(name, type);
    }

    // 用户可以申请买房
    // userName是用户名字，homeName是房屋的名字
    @RequestMapping(path = "buyHome")
    public void buyHome(@RequestParam String userName, @RequestParam String homeName) {
        homeService.changeHomeOwner(userName, homeName);
    }

    // 用户查看自己买房情况
    // name是用户的名字，type是卖房
    @RequestMapping(path = "checkBuyHome")
    public List<?> checkBuyHome(@RequestParam String name, @RequestParam String type) {
        return homeService.checkHomeByType(name, type);
    }

    // 用户查看符合自己需求的房屋（出租或者售卖）
    // homeOutType是租房或者卖房其中一种
    @RequestMapping(path = "getCommandHome")
    public List<?> getCommandHome(@RequestParam String homeOutType) {
        return homeService.showCurrentTypeHome(homeOutType);
    }

    // 用户根据房屋名称来查询房屋信息
    @RequestMapping(path = "getHomeByName")
    public Home getHomeByName(@RequestParam String homeName) {
        return homeService.getHomeByName(homeName);
    }

}
